package com.xuecheng.web.exceptions;

import com.xuecheng.commons.enums.ErrorCode;
import com.xuecheng.commons.model.vo.ResponseResult;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 自定义异常处理
 *   声明异常处理
 * @RestControllerAdvice：对所有controller类进行统一异常的处理
 *   支持包扫描
 */
@Component
@RestControllerAdvice(
        basePackages = {
                "com.xuecheng.learning.controller",
                "com.xuecheng.system.controller",
                "com.xuecheng.basic.controller",
                "com.xuecheng.order.controller",
                "com.xuecheng.search.controller",
                "com.xuecheng.media.controller",
                "com.xuecheng.content.controller",
                "com.xuecheng.teaching.controller"
        }
)
public class GlobalExceptionAdvice {

    /**
     * 异常处理方法：当controller方法出现异常时，自动进入异常处理器的指定方法中
     * 要求：
     *    1、返回值和controller方法一致
     *    2、参数：controller中的异常对象
     * 在方法上配置一个注解
     *    通过次注解，可以指定进入此方法的异常类型
     */
    @ExceptionHandler(RuntimeException.class)
    public ResponseResult exception(Exception e) {
        e.printStackTrace();//打印堆栈
        ErrorCode code = ErrorCode.ERROR;
        return ResponseResult.errorResult(code);
    }


    //处理业务异常
    @ExceptionHandler(BusinessException.class)
    public ResponseResult businessException(BusinessException e) {
        e.printStackTrace();//打印堆栈
        ErrorCode code = e.getErrorCode();
        return ResponseResult.errorResult(code);
    }



}
